package cn.itcast.nems.studentrecord.dto.change;

import cn.itcast.nems.studentrecord.constant.ReferenceTypeEnum;
import cn.itcast.nems.studentrecord.enumeration.StudentRecordStateEnum;
import lombok.Data;

import java.time.LocalDate;
import java.util.List;

/**
 * 学籍变更时用的数据对象；如果学籍变更只涉及一个班（如：退学）原班级和目标班值一样
 *
 * @author liyong
 * create: 2023-11-21 16:02:06
 **/
@Data
public class AbstractStudentRecordChangeDTO {
    /**
     * 凭单类型
     */
    private ReferenceTypeEnum journalType;

    /**
     * 凭单头ID
     */
    private String journalId;
    /**
     * 凭单行ID
     */
    private String journalLineId;

    /**
     * 原班学籍ID
     */
    private String originStudentRecordId;

    /**
     * 原班ID
     */
    private Integer originClazzId;
    /**
     * 原班名称
     */
    private String originClazzName;
    /**
     * 原班出班日期
     */
    private LocalDate originClazzOutDate;

    /**
     * 目标班级
     */
    private Integer targetClazzId;
    /**
     * 目标班级名称
     */
    private String targetClazzName;
    /**
     * 目标班级原始价格
     */
    private Integer targetClazzPrice;
    /**
     * 目标班入班日期
     */
    private LocalDate targetClazzInDate;

    /**
     * 目标班级应付金额
     */
    private Integer targetClazzAmountDue;
    /**
     * 目标班级实际应付金额
     */
    private Integer targetClazzActualAmountDue;
    /**
     * 目标班级转移费用(从其他班转入的金额)
     */
    private Integer targetClazzTransferAmount;

    /**
     * 目标班级优惠金额
     */
    private Integer targetClazzDiscountAmount;

    /**
     * 目标班级状态
     */
    private StudentRecordStateEnum targetClazzState = StudentRecordStateEnum.PENDING;

    /**
     * 目标班优惠信息
     */
    private List<StudentRecordChangeDiscountDTO> discounts;

    /**
     * 学籍备注
     */
    private String remark;

    /**
     * 根据学籍变更类型判断是否有对应的订单
     *
     * @return 是否订单
     */
    public boolean hasOrder() {
        boolean result;
        switch (this.getJournalType()) {
            case ORDER, RENEWAL, TRANSFER, REPEAT -> result = true;
            default -> result = false;
        }
        return result;
    }
}
